package com.deyuanyun.pic.settings.domain.util;

import java.sql.Statement;
import java.util.Properties;

import org.apache.ibatis.executor.resultset.ResultSetHandler;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;

/**
 * MyBatis的拦截器，主要用于对结果集Code的翻译。
 * 
 * 悲催没搞出来。
 *      本来计划是拦截DefaultResultSetHandler的createResultObject方法，给所有创建的对象加上代理，来处理get方法的，类似懒加载的实现原理。
 *      但是拦截不了，呵呵呵呵。
 * 
 * 
 * 现在这样的拦截略有点不好，所以暂时不用本类。还是手动去调用DomainCodeInterceptor.newProxyInstance。并且如果拦截了所有的返回，可能以前的代码也有点不舒服。
 * 
 * @author ChenKui
 * @date 2016-06-29
 *
 */
@Intercepts(@Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class}))
public class DomainInterceptor implements Interceptor {

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        System.out.println("拦截器进来了....");
        Object o = invocation.proceed();
        //DomainCodeInterceptor.newProxyInstance(list);
        return o;
    }

    @Override
    public Object plugin(Object target) {
        if (target instanceof ResultSetHandler) {
            return Plugin.wrap(target, this);
        } else {
            return target;
        }
    }

    @Override
    public void setProperties(Properties paramProperties) {

    }

}
